NIUHE

日々私たちが过ごしている日常というのは、実は奇迹の连続なのかもしれんな

RL - Deep Deterministic Policy Gradient (DDPG)

Deep Deterministic Policy Gradient (DDPG) 是由 DeepMind 的 Lillicrap 等人于2015年提出的算法,发表在ICLR 2016上。DDPG 是基于 DPG 算法的改进,可以看作是 Actor-critic 和 DQN 的结合,它同时学习一个 Q-function 和一个策略(policy):用 Q-learning 的方法学习 Q-function,然后用 Q-function 更新策略。

DPG

Deterministic Policy Gradient (DPG) 是把策略梯度(policy gradient)算法扩展到确定性策略(deterministic policy)上。事实上,DPG 被证明是随机策略梯度(stochastic policy gradient)的一种特殊情况。

随机策略梯度: \[ \triangledown_\theta J(\pi_\theta)=\mathbb{E}_{s\sim\rho^\pi, a\sim\pi_\theta}[\triangledown_\theta\log\pi_\theta(a|s)Q^\pi(s,a)] \] 其中,\(\pi_\theta\) 是由参数为 \(\theta\) 的函数近似的策略,\(\rho^\pi\) 为策略 \(\pi_\theta\) 的状态分布(state distribution)。

大部分 model-free 的增强学习算法属于泛化的策略迭代(policy iteration)算法,一般分为两步:策略评估(policy evaluation) 和策略改进( policy improvement)。策略评估通常使用 Monte-Carlo evaluationtemporal difference learning 来近似 \(Q^\pi(s, a)\)。策略改进则通常通过最大化评估的 action-value 来得到:\(\mu^{k+1}(s) = \arg\max_aQ^{\mu^k}(s, a)\)

然而,在连续的动作空间(continuous action spaces)里这种最大化却是不可行的。在离散的动作空间里,我们可以为每个action计算相应 Q-value 然后进行比较;但是在连续的动作空间中,我们不可能把每个action的 Q-value 都计算出来再比较,而通过对 Q-function 求导求的方式计算最大值开销又很大。所以,取而代之的是单独用一个函数近似策略,然后用 Q-function 的梯度来改进该策略。具体来说,对于每个访问过的状态 \(s\),策略函数的参数 \(\theta^{k+1}\) 根据 \(\triangledown_\theta Q^{\mu_k}(s, \mu_\theta(s))\) 来更新: \[ \begin{align} \theta^{k+1}&=\theta^k+\alpha\mathbb{E}_{s\sim\rho^{\mu^k}}[\triangledown_\theta Q^{\mu^k}(s, \mu_\theta(s))]\\ &= \theta^k + \alpha\mathbb{E}_{s\sim\rho^{\mu^k}}[\triangledown_\theta \mu_\theta(s)\triangledown_aQ^{\mu^k}(s, a)|_{a=\mu_\theta(s)}] \end{align} \]

可以证明,上述更新也属于策略梯度算法,这就是DPG算法的策略更新公式。

DDPG

DDPG改进了 Q-function 的学习方式,而策略端的更新方式和DPG相同,即如式(1)所示。在 DPG 中,Q-function 是通过 Q-learning 的方式来学习的,而当使用神经网络来近似 Q-function 的时候会导致训练不稳定,DDPG 应用了 DQN 中的两个trick来解决不稳定的问题,也就是经验池(replay buffer)目标网络(target network)

具体来说,经验池 \(D\) 每次探索都会存储元组 \((s, a, r, s', d)\),其中 \(d\) 为一个布尔变量,如果 d == True,就表明 \(s'\) 是终止状态(terminal state)。 每次更新时都会从经验池随机采样一批数据进行更新。经验池的大小是一个需要微调的超参数:如果经验池过小的话,会导致对池内数据过拟合;如果经验池存储所有数据的话,又会放慢学习的速度。

目标网络是指用单独的网络参数来生成目标(q-target),设策略函数的参数为 \(\theta\),Q-function 的参数为 \(\phi\),则对应的目标网络参数为 \(\theta_{tag}\)\(\phi_{tag}\),生成的目标为: \[ r + \gamma(1-d)Q_{\phi_{tag}}(s', \mu_{\theta_{tag}}(s')) \] 所以 Q-value 端的更新公式为: \[ \triangledown_\phi \mathbb{E}_{s,a,r,s',d\sim D}\left[\left(Q(s,a)-(r + \gamma(1-d)Q_{\phi_{tag}}(s', \mu_{\theta_{tag}}(s')))\right)^2\right] \] 与DQN不同的是,DDPG中的目标网络使用“软更新”的方式,即目标网络并不是隔一定时间后与主网络同步,而是朝着主网络缓慢移动: \[ \theta_{tag}\leftarrow\tau\theta+(1-\tau)\theta_{tag}\\ \phi_{tag}\leftarrow\tau\phi+(1-\tau)\phi_{tag} \] 其中,\(\tau \in (0, 1)\) 是一个超参数,通常取值接近 1。

为了增加探索能力,训练时在选择每个动作的时候都会加上随机噪声 \(\mathcal{N}\),论文作者建议使用时间相关的 OU噪声,但是最近的研究结果表明使用不相关的、zero-mean的高斯噪声效果会更好。同时为了取得更高质量的训练数据,噪声可以随着训练过程逐步减小。另外,在评测时应去掉噪声。

DDPG算法

总结

特点

  • off-policy算法
  • 只能用于连续的动作空间
  • 可以看作是把DQN应用到连续动作空间

References

[1] http://proceedings.mlr.press/v32/silver14.pdf

[2] https://arxiv.org/abs/1509.02971

[3] https://spinningup.openai.com/en/latest/algorithms/ddpg.html

Powered by Hexo and Theme by Hacker
© 2019 NIUHE